From 1ad01acbf2a86af4decb34496f4ef1f05184ee5e Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 14 Jan 2009 22:14:57 +0100 Subject: [PATCH] Add _gdk_drawable_get_subwindow_scratch_gc as a way to get cached gcs with GDK_INCLUDE_INFERIORS --- gdk/gdkdraw.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ gdk/gdkinternals.h | 1 + gdk/gdkscreen.h | 1 + 3 files changed, 48 insertions(+) diff --git a/gdk/gdkdraw.c b/gdk/gdkdraw.c index 73f262ad3c..9c9385fbfb 100644 --- a/gdk/gdkdraw.c +++ b/gdk/gdkdraw.c @@ -1784,6 +1784,52 @@ _gdk_drawable_get_scratch_gc (GdkDrawable *drawable, } } +/** + * _gdk_drawable_get_subwindow_scratch_gc: + * @drawable: A #GdkDrawable + * + * Returns a #GdkGC suitable for drawing on @drawable. The #GdkGC has + * the standard values for @drawable, except for the graphics_exposures + * field which is %TRUE and the subwindow mode which is %GDK_INCLUDE_INFERIORS. + * + * The foreground color of the returned #GdkGC is undefined. The #GdkGC + * must not be altered in any way, except to change its foreground color. + * + * Return value: A #GdkGC suitable for drawing on @drawable + * + * Since: 2.18 + **/ +GdkGC * +_gdk_drawable_get_subwindow_scratch_gc (GdkDrawable *drawable) +{ + GdkScreen *screen; + gint depth; + + g_return_val_if_fail (GDK_IS_DRAWABLE (drawable), NULL); + + screen = gdk_drawable_get_screen (drawable); + + g_return_val_if_fail (!screen->closed, NULL); + + depth = gdk_drawable_get_depth (drawable) - 1; + + if (!screen->subwindow_gcs[depth]) + { + GdkGCValues values; + GdkGCValuesMask mask; + + values.graphics_exposures = TRUE; + values.subwindow_mode = GDK_INCLUDE_INFERIORS; + mask = GDK_GC_EXPOSURES | GDK_GC_SUBWINDOW; + + screen->subwindow_gcs[depth] = + gdk_gc_new_with_values (drawable, &values, mask); + } + + return screen->subwindow_gcs[depth]; +} + + /** * _gdk_drawable_get_source_drawable: * @drawable: a #GdkDrawable diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h index 62d9f132fe..3841885a85 100644 --- a/gdk/gdkinternals.h +++ b/gdk/gdkinternals.h @@ -241,6 +241,7 @@ cairo_surface_t * _gdk_drawable_create_cairo_surface (GdkDrawable *drawable, /* GC caching */ GdkGC *_gdk_drawable_get_scratch_gc (GdkDrawable *drawable, gboolean graphics_exposures); +GdkGC *_gdk_drawable_get_subwindow_scratch_gc (GdkDrawable *drawable); void _gdk_gc_update_context (GdkGC *gc, cairo_t *cr, diff --git a/gdk/gdkscreen.h b/gdk/gdkscreen.h index b1f3b8e8a7..96ff8d44a2 100644 --- a/gdk/gdkscreen.h +++ b/gdk/gdkscreen.h @@ -51,6 +51,7 @@ struct _GdkScreen GdkGC *normal_gcs[32]; GdkGC *exposure_gcs[32]; + GdkGC *subwindow_gcs[32]; cairo_font_options_t *font_options; double resolution; /* pixels/points scale factor for fonts */ -- 2.30.2